package com.easy;

import java.util.Arrays;
import java.util.HashMap;

public class TwoAdd {

  /**
   * 两数相加
   * <p>
   * 给你两个 非空 的链表，表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的，并且每个节点只能存储 一位 数字。
   * <p>
   * 请你将两个数相加，并以相同形式返回一个表示和的链表。
   * <p>
   * 你可以假设除了数字 0 之外，这两个数都不会以 0 开头。
   * <p>
   * 输入：l1 = [2,4,3], l2 = [5,6,4] 输出：[7,0,8] 解释：342 + 465 = 807.
   */
  public static void main(String[] args) {
    int[] nums = {6, 4, 3, 1, 2};
    int k = 1;
    System.out.println(Arrays.toString(towAdd(nums, k)));
  }

  /**
   * hash 表最优 2 ms	38 MB
   */
  public static int[] towAdd(int[] nums, int target) {

    HashMap<Integer, Integer> res = new HashMap<>();

    for (int i = 0; i < nums.length; i++) {

      int diff = target - nums[i];

      if (res.containsKey(diff)) {
        return new int[]{res.get(diff), i};
      }

      res.put(nums[i], i);

    }
    return null;
  }

  /**
   * 暴力搜索 70 ms	38.3 MB
   */
  public static int[] towAdd2(int[] nums, int target) {

    int[] res = new int[2];
    for (int i = 0; i < nums.length; i++) {
      for (int j = 0; j < nums.length; j++) {
        int i_v = nums[i];
        int j_v = nums[j];
        if (i_v + j_v == target) {
          res[0] = i;
          res[1] = j;
          return res;
        }
      }
    }
    return res;
  }


}
